var CertCtl = new IDCertCtl();

//身份证读卡控件创建
function IDCertCtl() {
    //创建用于与服务交换数据的对象
    this.xhr = createXmlHttp();
    this.type = "CertCtl";
    this.height = 0;
    this.width = 0;
    //连接
    this.connect = CertCtl_connect;
    //断开
    this.disconnect = CertCtl_disconnect;
    //获取状态
    this.getStatus = CertCtl_getStatus;
    //读卡
    this.readCert = CertCtl_readCert;
}

//创建XMLHttpRequest 对象，用于在后台与服务器交换数据
function createXmlHttp() {
    var xmlHttp = null;
    //根据window.XMLHttpRequest对象是否存在使用不同的创建方式
    if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest(); //FireFox、Opera等浏览器支持的创建方式
    } else {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); //IE浏览器支持的创建方式
    }
    return xmlHttp;
}

//连接方法
function CertCtl_connect() {
    var result = "";
    //创建请求 第一个参数是代表以post方式发送；第二个是请求端口和地址；第三个表示是否异步
    CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/connect", false);
    //发送请求
    try {
        CertCtl.xhr.send();
    } catch (e) {}
    //返回值readyState   0: 请求未初始化
    //				    1: 服务器连接已建立
    //				    2：请求已接收
    //				    3: 请求处理中
    //				    4: 请求已完成，且响应已就绪
    //返回值status      200: "OK"
    //					404: 未找到页面
    //当返回值readyState为4且status为200时,为查询成功
    if (CertCtl.xhr.readyState == 4 && CertCtl.xhr.status == 200) {
        result = CertCtl.xhr.responseText;
        CertCtl.xhr.readyState = 1;
    }
    return result;
}

//断开方法
function CertCtl_disconnect() {
    var result = "";
    //创建请求 第一个参数是代表以post方式发送；第二个是请求端口和地址；第三个表示是否异步
    CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/disconnect", false);
    //发送请求
    try {
        CertCtl.xhr.send();
    } catch (e) {}
    if (CertCtl.xhr.readyState == 4 && CertCtl.xhr.status == 200) {
        result = CertCtl.xhr.responseText;
        CertCtl.xhr.readyState = 1;
    }
    return result;
}
//获取状态方法
function CertCtl_getStatus() {
    var result = "";
    //创建请求 第一个参数是代表以post方式发送；第二个是请求端口和地址；第三个表示是否异步
    CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/getStatus", false);
    //发送请求
    try {
        CertCtl.xhr.send();
    } catch (e) {}
    if (CertCtl.xhr.readyState == 4 && CertCtl.xhr.status == 200) {
        result = CertCtl.xhr.responseText;
        CertCtl.xhr.readyState = 1;
    }
    return result;
}

//执行读卡操作
function CertCtl_readCert() {
    var result = "";
    try {
        //创建请求 第一个参数是代表以post方式发送；第二个是请求端口和地址；第三个表示是否异步
        CertCtl.xhr.open("POST", "http://127.0.0.1:18889/api/readCert", false);
        //发送请求
        CertCtl.xhr.send();
        if (CertCtl.xhr.readyState == 4 && CertCtl.xhr.status == 200) {
            result = CertCtl.xhr.responseText;
            CertCtl.xhr.readyState = 1;
        }
    } catch (e) {

    }
    return result;
}


//转为Json格式
function toJson(str) {
    //var obj = JSON.parse(str);
    //return obj;
    return eval('(' + str + ')');
}

//清空页面上显示的内容
function clearForm() {
    //对应控件的值全部清空
    document.getElementById("timeElapsed").value = "";
    document.getElementById("certType").value = "";
    document.getElementById("timeElapsed").value = "";
    document.getElementById("venderId").value = "";
    document.getElementById("signature").value = "";
    document.getElementById("partyName").value = "";
    document.getElementById("gender").value = "";
    document.getElementById("nation").value = "";
    document.getElementById("bornDay").value = "";
    document.getElementById("certAddress").value = "";
    document.getElementById("certNumber").value = "";
    document.getElementById("certOrg").value = "";
    document.getElementById("effDate").value = "";
    document.getElementById("expDate").value = "";
    document.getElementById("result").value = "";
    document.getElementById("HeadPic").src = "";
    document.getElementById("PhotoDisplay").src = "";
}

//连接方法
function connect() {
    //清空页面
    clearForm();

    try {
        //调用对应的连接方法,并赋值给result
        var result = CertCtl.connect();
        //如果result为空,代表读卡插件未启动
        if (result == "") {
            alert("未启动读卡插件!")
        } else {
            //result页面回显
            document.getElementById("result").value = result;
        }
    } catch (e) {}
}

//断开连接方法
function disconnect() {
    //清空页面
    clearForm();

    try {
        //调用对应的断开连接方法,并赋值给result
        var result = CertCtl.disconnect();
        //如果result为空,代表读卡插件未启动
        if (result == "") {
            alert("未启动读卡插件!")
        } else {
            //result页面回显
            document.getElementById("result").value = result;
        }
    } catch (e) {}
}

//获取状态方法
function getStatus() {
    //清空页面
    clearForm();

    try {
        //调用对应的获取状态方法,并赋值给result
        var result = CertCtl.getStatus();
        //如果result为空,代表读卡插件未启动
        if (result == "") {
            alert("未启动读卡插件!")
        } else {
            //result页面回显
            document.getElementById("result").value = result;
        }
    } catch (e) {}
}

//读卡方法
function readCert() {
    //清空页面
    clearForm();
    //开始时间
    var startDt = new Date();
    //调用对应的读卡方法
    var result = CertCtl.readCert();
    //如果result为空,代表读卡插件未启动
    if (result == "") {
        alert("未启动读卡插件!")
    } else {
        //结束时间
        var endDt = new Date();
        //读卡时间回显
        document.getElementById("timeElapsed").value = (endDt.getTime() - startDt.getTime()) + "毫秒";
        document.getElementById("result").value = result;
        //var resultObj = toJson(result);
        //result = result.replace("\"resultFlag\":","\"resultFlag\":\"true\"");
        //格式化result
        var resultObj = $.parseJSON(result);
        //resultFlag为0代表读卡成功
        if (resultObj.resultFlag == "0") {
            //回显相关数据
            document.getElementById("signature").value = resultObj.signature;
            document.getElementById("venderId").value = resultObj.venderId;
            document.getElementById("certType").value = resultObj.resultContent.certType;
            document.getElementById("partyName").value = resultObj.resultContent.partyName;
            document.getElementById("gender").value = resultObj.resultContent.gender;
            document.getElementById("nation").value = resultObj.resultContent.nation;
            document.getElementById("bornDay").value = resultObj.resultContent.bornDay;
            document.getElementById("certAddress").value = resultObj.resultContent.certAddress;
            document.getElementById("certNumber").value = resultObj.resultContent.certNumber;
            document.getElementById("certOrg").value = resultObj.resultContent.certOrg;
            document.getElementById("effDate").value = resultObj.resultContent.effDate;
            document.getElementById("expDate").value = resultObj.resultContent.expDate;
            document.getElementById("HeadPic").src = "data:image/jpeg;base64," + resultObj.resultContent.identityPic;
            document.getElementById("PhotoDisplay").src = "data:image/jpeg;base64," + resultObj.resultContent.identityPrintPic;
        } else if (resultObj.resultFlag == "-1") {
            if (resultObj.errorMsg == "端口打开失败") {
                alert("读卡器未连接");
            } else {
                alert(resultObj.errorMsg);
            }
        } else if (resultObj.resultFlag == "-2") {
            alert(resultObj.errorMsg);
        }
    }
}